記得在 Day 19 的最後講到架構演化的最後一個階段就是 microservice、log 和 metrics。因應如今多元的環境與業務上的需求,微服務架構的火紅程度無庸置疑,今天主要從幾個面相切入,首先是我怎麼看這東西,再來是列舉幾個大的生態系,最後講一下服務發現的兩種類型,順便跟昨天的 docker 掛勾。
不知道大家有沒有經驗,專案大到一個程度之後就會開始拆多個模組,這在 Maven 有 Parent Children 的專案架構,Gradle 也有一個 Multi Module Project的專案架構。簡單的需求也許是作為單純函式庫來引用,不過如今部屬技術的成熟,Docker 滿天飛,如果你的每個模組都具備通訊的接口又有自己連接外部服務的能力,就像一個獨立的子系統一樣彼此可以互相溝通,這些彼此可以互相溝通的子系統又聯結成一個大的系統,這就是我們今天看到的微服務架構了。
其實專做微服務相關的框架很多,但因為主講的是大到有生態系的,所以等一下就不會提及像 Jersey 和 Dropwizard 這類的。
(有沒有要反對家輝哥 XDD),喔不是,是應該沒有人會反對這個火紅的程度放在第一位吧。學 Java 沒學 Spring 就好像宵夜不吃鹽酥雞 (亂說話,毆飛),但總而言之,它已非昔日那個 IOC & DI Framework 了,畢竟 Spring Boot 和 Spring Cloud 的發展完完全全讓他成為一個超級全棧式框架,雖然說他一開始只是把 Netflix solution Spring 化,嘿嘿。只要這個專案終究最後會變成中大型專案,用它實在合理中的合理,它完全制霸 J2EE 現在商業的這塊。
dubbo
其實還有其他相關的,但我想拿來泛指中國大陸電商技術大紅大紫百家爭鳴的代表。畢竟中國的環境相對特別,因應那個生態系長出了很多他們自己特有的框架,其中當然也包含微服務相關的,他們很常借鏡別人的框架然後寫出一個更好用更適合自己的。BAT (Baidu、Alibaba、Tencent) 至今在 Java 開源框架的貢獻也是有目共睹。
Lightbend (Typesafe)
這個是我流浪到 Scala 那年 (流浪到淡水!?),剛好摸到的東西。它面向的語言的確是略偏 Scala 一點,但 Java 也都能寫。這是一家公司,旗下叫有名的東東像是 Akka 和 Play Framework。Scala 之父和Akka 之父,都剛好是這家的 Founder,所以你就知道他跟 Scala 有多密切。它整套生態系除了微服務外還更偏向 Reactive Stream 和 叢集與分散式計算,非常非常有趣。
Golang
上次看到一篇 go is not good 害我差點噴飯,這樣也可以兩千顆星星看來真的很恨耶大家。這邊我不想討論它的不足,反而我想說幾句他優秀的部份。就是如此功能面向微服務,輕薄短小,效能優秀的框架即使有一些小缺點也是可以忍受的 (呵呵,萬惡 err)。配上他們遠房親戚 K8s 那整群東東,實在是難以忽視的一群。
NodeJS
終於講到我了吧,終於講到我了吧,終於講到我了吧。是的還真是難以忽視這傢伙,常常有人說你把兩個 Java 學好基本上除了純硬體可能沒有做不到的事。哪兩個 Java 呢?Java & Javascript (呵呵,搞混的人還真不少)。NodeJS 天生非同步與事件驅動,雖然單線程但可以透過單機多台彌補,配上無敵的社群支持,其實競爭力還是很高的。
Other
其餘沒講到的不是對你們不尊敬,是我不熟。希望未來也可以看到更多應用的實例。
主要有兩種,Client Side Service Discovery 和 Server Side Service Discovery。範例很多,我舉最有名的各一個,Eureka (C) 和 K8s (S)。一圖勝過千言萬語,詳情請見下面的兩張圖,那麼今天就到這邊囉。
About Me
Jian-Min Huang
wide range skill set backend engineer
Research, Architecture, Coding, DB, Ops, Infra.
mainly write Java but also ❤️ Scala, Kotlin and Go